package com.gitee.loyo

import com.gitee.loyo.interfaces.*
import com.gitee.loyo.jdbc.Conn
import com.gitee.loyo.jdbc.JDBC
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import java.sql.Connection

object KSQL {
    /**
     * 数据库类型
     */
    var dialect: com.gitee.loyo.Dialect = com.gitee.loyo.Dialect.Mysql
    /**
     * 统一的logger
     */
    var logger: Logger = LoggerFactory.getLogger("KSQL")

    /**
     * 是否打印日志
     */
    var enableLog: Boolean = true

    /**
     * 是否自动提交（不需要手动commit）
     */
    var enableAutoCommit: Boolean = true

    /**
     * 单行期望和结果必须一致
     */
    var strictOneRow: Boolean = true

    /**
     * 字段名称与变量名称映射转换
     */
    var nameMappingStrategy: NameMappingStrategy = NameMappingStrategy.UNDERSCORE

    /**
     * 反射工具
     */
    var reflection: Reflection = Reflection.DEFAULT

    /**
     * 参数格式化打印
     */
    var formatter: Formatter = Formatter.DEFAULT

    /**
     * 空值判断
     */
    var nullDetector: NullDetector = NullDetector.DEFAULT

    /**
     * 尝试获取连接
     */
    var tryGetConnection: () -> Conn = {
        Conn.current()?:
        Conn.create(JDBC.ds()?.connection?:throw NullPointerException("未发现DataSource")).also {
            it.executeOnce = true
        }
    }

    /**
     * 模板SQL处理
     */
    var templateHandler: TemplateHandler = TemplateHandler.DEFAULT

    /**
     * ResultSet处理
     */
    var resultSetHandler: ResultSetHandler = ResultSetHandler.DEFAULT

    fun log(msg: String, vararg args: Any?){
        if(enableLog){
            logger.debug(msg, *args)
        }
    }

}
